//
//  OLsportMapViewController.m
//  heimaxing
//
//  Created by tony.唐 on 16/11/9.
//  Copyright © 2016年 xiedonglai. All rights reserved.
//

#import "OLsportMapViewController.h"
#import <MAMapKit/MAMapKit.h>
#import "OLsportTracking.h"
@interface OLsportMapViewController ()<MAMapViewDelegate>

@end

@implementation OLsportMapViewController{
    /// 起始位置
    CLLocation *_startLocation;


}

- (void)viewDidLoad {
    [super viewDidLoad];
   
    [self setupMapView];


}

#pragma mark - MAMapViewDelegate
/**
 * @brief 位置或者设备方向更新后，会调用此函数
 * @param mapView 地图View
 * @param userLocation 用户定位信息(包括位置与设备方向等数据) 是一个固定的对象
 * @param updatingLocation 标示是否是location数据更新, YES:location数据更新 NO:heading数据更新
 */

- (void)mapView:(MAMapView *)mapView didUpdateUserLocation:(MAUserLocation *)userLocation updatingLocation:(BOOL)updatingLocation {

 // 0. 判断 `位置数据` 是否变化 - 不一定是经纬度变化！
    if (!updatingLocation) {
        return;
    }
    // 大概 1s 更新一次！
    NSLog(@"%@ %p", userLocation.location, userLocation.location);
    NSLog(@" %p", userLocation);

    // 判断起始位置是否存在
    if (_startLocation == nil) {
        
        _startLocation = userLocation.location;
        
        // 1. 实例化大头针
        MAPointAnnotation *annotaion = [MAPointAnnotation new];
        
        // 2. 指定坐标位置
        annotaion.coordinate = userLocation.location.coordinate;
        
        // 3. 添加到地图视图
        [mapView addAnnotation:annotaion];
    }
    // 绘制轨迹模型
    [mapView addOverlay:[_sportTracking appendLocation:userLocation.location]];

}

/**
 * @brief 单击地图回调，返回经纬度
 * @param mapView 地图View
 * @param coordinate 经纬度
 */
- (void)mapView:(MAMapView *)mapView didSingleTappedAtCoordinate:(CLLocationCoordinate2D)coordinate{
   // 打印当前的纬度和经度
    NSLog(@"%f-%f",coordinate.latitude,coordinate.longitude);

   // 开始画线
    //1.建立结构体的数组  将经度纬度添加到数组
    CLLocationCoordinate2D coords[2];
    coords[0] = coordinate;
      // 开始的坐标
    coords[1] = _startLocation.coordinate;
    
    // 2. 构造折现对象MAPolyline
   
     MAPolyline *polyline = [MAPolyline polylineWithCoordinates:coords count:2];

    // 3. 将折线添加到地图
    [mapView addOverlay:polyline];

}


// 需要实现MAMapViewDelegate的-
/**
 * @brief 根据overlay生成对应的Renderer
 * @param mapView 地图View
 * @param overlay 指定的overlay
 * @return 生成的覆盖物Renderer
 */
- (MAOverlayRenderer *)mapView:(MAMapView *)mapView rendererForOverlay:(id<MAOverlay>)overlay {
    // 1. 判断 overlay 的类型
    if (![overlay isKindOfClass:[MAPolyline class]]) {
        return nil;
    }
    
    // 2. 实例化折线渲染器
    /**
     此类用于绘制MAPolyline,可以通过MAOverlayPathRenderer修改其fill和stroke attributes
     */

    // 2. 实例化折线渲染器
    OLsportPolyline *polyline = (OLsportPolyline *)overlay;
    MAPolylineRenderer *renderer = [[MAPolylineRenderer alloc] initWithPolyline:polyline];
    // 3. 设置显示属性
    renderer.lineWidth = 5;
    renderer.strokeColor = polyline.color;

    
    return renderer;
}




///自定义大头针视图代理方法
- (MAAnnotationView*)mapView:(MAMapView *)mapView viewForAnnotation:(id<MAAnnotation>)annotation{
    
     // 0.判断大头针的类型
    if (![annotation isKindOfClass:[MAPointAnnotation class]]) {
        
         return nil;
    }
    
    //1.查询科重用的大头针视图
     static NSString* annotaionId = @"annotaionIdID";
    
    MAAnnotationView* annotaionView = [mapView dequeueReusableAnnotationViewWithIdentifier:annotaionId];
    
    // 2, 如果没有查到，新建视图
    if (annotaionView == nil) {
        annotaionView = [[MAAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:annotaionId];
    }
    
    // 3.设置大头针视图， 设置图像
    UIImage* image = _sportTracking.sportImage;
    annotaionView.image = image;
    annotaionView.centerOffset = CGPointMake(0,-image.size.height*0.5 );
   // 4.返回自定义的大头针视图
    return annotaionView;
}



/**
 设置地图视图
 */
- (void)setupMapView {
    
    // 1. 实例化地图视图
    MAMapView *mapView = [[MAMapView alloc] initWithFrame:self.view.bounds];
    
    // 2. 添加到根视图
    [self.view addSubview:mapView];
    
    // 3. 隐藏比例尺
    mapView.showsScale = NO;
    
    // 4. 关闭相机旋转 - 能够降低能耗，省电
    mapView.rotateCameraEnabled = NO;
    
    // 5.显示用户位置
    mapView.showsUserLocation = YES;
    
    //6.跟踪用户位置- 追踪用户的location 与 heading更新/会放大地图的显示，将用户设置在地图的中心点，有时候速度会变的慢一些，
    mapView.userTrackingMode = MAUserTrackingModeFollowWithHeading;
    // 7. 允许后台定位 - 保证xcode中的 Background Modes   中的 Location updates 处于选中状态
    mapView.allowsBackgroundLocationUpdates = YES;
    
    // 8. 不允许系统暂停位置更新
    mapView.pausesLocationUpdatesAutomatically = NO;
    
    // 9.设置地图代理
    mapView.delegate = self;
}

@end
